/**
 * 将设备开发参数 配置化， 根据不同型号的设备，配置不同的参数
 */
let devicesConfig = {
  YF_029E: {
    desc: "第一次的设备",
    /** 功能 */
    func: {
      nfc: {
        /** 功能名称 */
        name: "nfc",
        /** 功能描述 */
        desc: "nfc读卡器",
        /** 功能类型 */
        params: {
          PROTOCOL_TYPE: 2,
          STX: "01",
          path: "/dev/ttyS3",
          baudRate: 115200,
        },
      },
      scan: {
        /** 功能名称 */
        name: "scan",
        /** 功能描述 */
        desc: "扫码器",
        /** 该功能串口是否启用 */
        enabledSerialPort: false,
        /** 是否依赖参数 */
        enabledParams: false,
        params: {},
      },
      face: {
        /** 功能名称 */
        name: "face",
        /** 功能描述 */
        desc: "人脸识别相机配置",
        /** 功能类型 */
        params: {
          camera: 0, //  1.前置摄像头 0.后置摄像头
          deviceType: 2, // 1.安卓 2.消费机 3.消费机自定义参数（非必填，默认安卓）
          thresholdValue: 0.7, // 人脸检测阈值 （非必填，默认0.9）
          rgbVideoDirection: 0, // 默认为0。可传入0、90、180、270四个选项。（非必填，默认0）
          mirrorVideoRGB: 0, // RGB无镜像，1：有镜像（非必填，默认0）
          rgbDetectDirection: 0, // rbg人脸检测角度 默认为0。可传入0、90、180、270四个选项。（非必填，默认0）
          mirrorDetectRGB: 0, //rbg人脸检测 0：RGB无镜像，1：有镜像 （非必填，默认0
        },
      },
    },
  },
  rk3568_r: {
    desc: "第二次的设备",
    /** 功能 */
    func: {
      nfc: {
        /** 功能名称 */
        name: "nfc",
        /** 功能描述 */
        desc: "nfc读卡器",
        /** 功能类型 */
        params: {
          PROTOCOL_TYPE: 2,
          STX: "02",
          path: "/dev/ttyS4",
          baudRate: 9600,
        },
      },
      scan: {
        /** 功能名称 */
        name: "scan",
        /** 功能描述 */
        desc: "扫码器",
        /** 功能类型 */
        params: {
          PROTOCOL_TYPE: 3,
          path: "/dev/ttyS3",
          baudRate: 9600,
        },
      },
      face: {
        /** 功能名称 */
        name: "face",
        /** 功能描述 */
        desc: "人脸识别相机配置",
        /** 功能类型 */
        params: {
          camera: 1, //  1.前置摄像头 0.后置摄像头
          deviceType: 2, // 1.安卓 2.消费机 3.消费机自定义参数（非必填，默认安卓）
          thresholdValue: 0.6, // 人脸检测阈值 （非必填，默认0.9）
          rgbVideoDirection: 0, // 默认为0。可传入0、90、180、270四个选项。（非必填，默认0）
          mirrorVideoRGB: 0, // RGB无镜像，1：有镜像（非必填，默认0）
          rgbDetectDirection: 0, // rbg人脸检测角度 默认为0。可传入0、90、180、270四个选项。（非必填，默认0）
          mirrorDetectRGB: 0, //rbg人脸检测 0：RGB无镜像，1：有镜像 （非必填，默认0
        },
      },
    },
  },
};

/**
 * 检查本地数据是否存在且格式正常
 * @param data 要检查的数据
 * @param expectedType 期望的数据类型（如 'object', 'array', 'string', 'number' 等）
 * @returns {boolean} 如果数据存在且格式正常返回 true，否则返回 false
 */
export const isValidLocalData = (data: any, expectedType: string): boolean => {
  if (data === null || data === undefined) return false;

  const actualType = Array.isArray(data) ? "array" : typeof data;

  // 检查对象是否为空
  if (actualType === "object" && Object.keys(data).length === 0) {
    return false; // 空对象返回 false
  }

  return actualType === expectedType;
};

// 查看是否有本地设置
const localData = uni.getStorageSync("__DevicesConfig__");
if (isValidLocalData(localData, "object")) {
  // 本地数据存在且格式正常 替换参数
  devicesConfig = localData;
} else {
  // 存到本地
  uni.setStorageSync("__DevicesConfig__", devicesConfig);
}

/**
 * 获取型号开发配置
 */
export const getDeviceConfig = (funcName: string, device?: any) => {
  if (!device) {
    device = uni.getSystemInfoSync().deviceModel;
  }
  // @ts-ignore
  const devconf = devicesConfig[device];
  if (!devconf) {
    console.warn(`未找到设备配置：${device}`);
    return {};
  } else {
    return devconf.func[funcName];
  }
};

export const getCurrentDeviceConfig = (device: string) => {
  if (!device) {
    device = uni.getSystemInfoSync().deviceModel;
  }
  // @ts-ignore
  const devconf = devicesConfig[device];
  if (!devconf) {
    console.warn(`未找到设备配置：${device}`);
    return {};
  } else {
    return devconf;
  }
};
